package com.ldpp.backtesting;

import com.ldpp.backengine.EngineForBack;
import com.ldpp.entity.TickMin;
import com.ldpp.service.TickMinService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

/**
 * @author ：gongtan
 * @date ：Created in 2021/3/16 10:09
 * @description： 回测策略类
 * @modified By：
 */
@AllArgsConstructor
@Service
public class BackStrategy {

    @Autowired
    private TickMinService tickMinService;

    /**
     * 回测 判断是否执行相应的策略
     * 如若没有策略需要执行，则根据回测参数执行。
     * 使用策略代码则需要根据回测参数，以及策略代码来执行，
     *
     * ------------------ 设计说明 -----------------------
     * 回测策略 对开平仓模拟操作的方法统一存在于在本java类中
     * （即，策略的模拟操作调用本java类，本java类作为所有回测的唯一标准，其他策略性回测以奔、本java类为主编写）
     *
     * --------------------------------------------
     * 回测结果_持仓变化_收益曲线_开平交易日志_tick行情曲线
     */


    /**
     * 回测主方法
     * @author gt
     * @date 2021-03-16 10:15
     * @return
    */
    public void backMain(BackParam backParam){
        //根据时间段获取回测所需交易tick数据 m级别
        List<TickMin> tickByTimeCup = tickMinService.getTickByTimeCup(backParam);
        //启动回测引擎
        EngineForBack.start();
        //将此数据逐条放入引擎之中
        for (TickMin tickMin : tickByTimeCup) {
            EngineForBack.creatEvent(tickMin);
        }
    }
}
